package learningThread.syn.synchronizedMethodLockObj.lockReentrant;

/**
 * synchronized :可重入锁,自己可以再次获取自己内部的锁，比如service1调用 service2，service2调用service3。
 *               如果锁不可重入的话，会造成死锁。
 *
 *               可重入锁也支持父子类继承
 */
public class Service {

    public synchronized void service1(){
        System.out.println("调用service1方法");
        service2();
    }

    public synchronized void service2(){
        System.out.println("调用service2方法");
        service3();
    }

    public synchronized void service3(){
        System.out.println("调用service3方法");
        try {
            System.out.println("begin method:"+Thread.currentThread().getName());
            Thread.sleep(5000);
            System.out.println("end method:"+Thread.currentThread().getName());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
